package com.woniuxy.hrp.security;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * @Auther: 老谭（<a href="http://www.woniuxy.com">蜗牛学苑</a>）
 * jwt认证 工具类 包括jwt的创建，jwt的验证 ，jwt中payload数据的获取(解析)
 */
@Component
public class JwtUtil {
//    @Value("${jwt.secret}")
//    private String serret;
    @Autowired
    private JwtProperties jwtProperties; //配置属性较多时不用上面的方式
    /**
     * 创建jwt
     * @param id
     * @param account
     * @param   1，患者 2.医生 3.管理员
     * @return
     */
    public  String createJWT(int id,String account){
        DateTime now = DateTime.now();
        DateTime newTime = now.offsetNew(DateField.MINUTE, jwtProperties.getExpireSencond());
        Map<String,Object> payload = new HashMap<String,Object>();
        //签发时间
        payload.put(JWTPayload.ISSUED_AT, now);
        //过期时间
        payload.put(JWTPayload.EXPIRES_AT, newTime);
        //生效时间
        payload.put(JWTPayload.NOT_BEFORE, now);
        //载荷
        payload.put("id", id);
        payload.put("account", account);
        String key = jwtProperties.getSecret();
        String token = JWTUtil.createToken(payload, key.getBytes());
        return token;
    }
//校验jwt
    public  boolean verifyJWT(String jwt){
        try{
        JWT token = JWTUtil.parseToken(jwt);//解析
        boolean verifyKey = token.setKey(jwtProperties.getSecret().getBytes()).verify();
        return verifyKey;}
        catch (Exception e){
           return  false;
        }
    }
    //解析jwt并获取参数
    public Object getInfo(String jwt, String name) {
        JWT token = JWTUtil.parseToken(jwt);
        return token.getPayload(name);
    }
}
